// scoreAllocation project main.go
package main

import (
	"encoding/json"
	"flag"
	"fmt"
	"net/http"
	"time"
)

type data struct {
	score int    // 评分
	note  string // 备注
}

type member struct {
	Name      string           `json:"name"`      // 姓名
	ImagePath string           `json:"imagePath"` // 头像地址
	Desc      string           `json:"desc"`      // 说明
	m         map[string]*data // ip - 评分数据列表
	sum       int              // 评分总分
}

var (
	ip   = flag.String("ip", "", "服务器ip（可选空）")
	port = flag.String("port", "8080", "服务器端口")

	scoreMin = 1   // 最小评分
	scoreMax = 100 // 最大评分

	roundKey   string    = ""  // 每一轮关键密钥   当前时间戳 - md5
	memberList []*member = nil // 成员列表

	configFilePath string = "./config.json" // 本地数据保存
)

func init() {
	flag.Parse()
	initData()
}

func main() {
	// 每次新打开的页面 随机生成 随机数 key
	serverPort := fmt.Sprintf("%s:%s", *ip, *port)
	fmt.Printf("服务器地址： %s\n", serverPort)
	server(serverPort)
}

func server(serverPort string) {
	// web1 评分(附加随机数) 关闭页面
	http.HandleFunc("/score", score)

	// 主页
	http.HandleFunc("/", index)

	//开始监听
	http.ListenAndServe(serverPort, nil)
}

func initData() {
	// 生成本次 md5
	roundKey = fmt.Sprintf("%x", Md5(time.Now().UnixNano()))
	fmt.Printf("Data init roundKey = %v\n", roundKey)

	// 读取本地 config.json 文档
	buff := readFile(configFilePath)
	if len(buff) < 1 {
		fmt.Printf("Not Found %s! create new file!\n", configFilePath)
		memberList = []*member{
			&member{
				Name:      "姓名",
				ImagePath: "图片地址（可空）",
				Desc:      "详细说明",
			},
		}
		buff, _ = json.MarshalIndent(memberList, "", "  ")
		outFile(configFilePath, buff)
	}
	json.Unmarshal(buff, &memberList)
	for k := range memberList {
		memberList[k].m = make(map[string]*data)
	}
}
